#1 常规操作方法
str1 = 'helloworld'
# 大小写转换
new_str1 = str1.upper()
print(new_str1)
# HELLOWORLD
print(new_str1.lower())
# helloworld

# 字符串的分割
str_mail = 'zw@139.com'
lst1 = str_mail.split('@')
print(lst1[0], '---', lst1[1])
# zw --- 139.com

# 制定子串出现的次数
print(str1.count('o'))
# 2

# 检索操作
print(str1.find('o'))
# 4
print(str1.find('p'))   # p在字符串中不存在
# -1
print(str1.index('o'))
# 4
#print(str1.index('p')) # 报错

# 判断前缀和后缀
str2 = 'newtext.txt'
print(str2.startswith("new"))
# True
print(str2.endswith(".txt"))
# True

str3 = 'helloworld'
# 字符串替换
new_str3 = str3.replace('o', '-', 1)
print(new_str3)
# hell-world

# 指定的宽度范围内居中
print(str3.center(20, '*'))
# *****helloworld*****

# 将字符串，加入每个制定的字符，不包含最后一个指定字符
print(str3.join('*-*-*'))
# *helloworld-helloworld*helloworld-helloworld*

# 去掉字符串的空格
str4 = '   hello   world   '
print(str4.strip()) # 去掉字符串左右的空格
# hello   world
print(str4.lstrip()) # 去掉字符串左边的空格
# hello   world
print(str4.rstrip()) # 去掉字符串右边的空格
#    hello   world
# 去掉字符串制定的字符（与字符顺序无关）
str5 = 'ld-hello   world-dl'
print(str5.strip('ld'))     # 去掉左右两侧出现的字符
# -hello   world-
print(str5.lstrip('ld'))
# -hello   world-dl
print(str5.rstrip('ld'))
# ld-hello   world-

#2 格式化字符串
# 使用占位符进行格式化
name = 'zhangsan'
age = 18
score = 98.5
#print(name + age) # 报错 TypeError: can only concatenate str (not "int") to str
print('姓名：%s, 年龄：%d, 成绩：%.1f' % (name, age, score))
# 姓名：zhangsan, 年龄：18, 成绩：98.5

# f-string
print(f'姓名：{name}, 年龄：{age}, 成绩：{score}')
# 姓名：zhangsan, 年龄：18, 成绩：98.5

# 使用字符串format方法
print('姓名：{0}, 年龄：{1}, 成绩：{2}'.format(name, age, score))
# 姓名：zhangsan, 年龄：18, 成绩：98.5
print('姓名：{2}, 年龄：{0}, 成绩：{1}'.format(age, score, name)) # 调整顺序
# 姓名：zhangsan, 年龄：18, 成绩：98.5

#3 format方法格式化字符串的详细格式
str6 = 'helloworld'
#
print('{0:*<20}'.format(str6)) # 字符串宽度20，左对齐，空白部分用*好填充，索引0
# helloworld**********
print('{0:*^20}'.format(str6))
# *****helloworld*****
# 千位分割符
print('{0:,}'.format(987654321.7856))
# 987,654,321.7856
# 浮点数小数部分的精度
print('{0:.2f}'.format(3.1415926))
# 3.14
# 字符串类型，表示最大的显示长度
print('{0:.5}'.format('helloworld'))
# hello
# 整数类型
num = 425
print('二进制：{0:b}, 十进制：{0:d}, 八进制：{0:o}, 十六进制：{0:x}, 十六进制：{0:X}'.format(num))
# 二进制：110101001, 十进制：425, 八进制：651, 十六进制：1a9, 十六进制：1A9
# 浮点数类型
pi = 3.1415926
print('显示两位小数：{0:.2f}, 科学计数法：{0:.2E}, {0:.2e}, 百分比显示：{0:.2%}'.format(pi))
# 显示两位小数：3.14, 科学计数法：3.14E+00, 3.14e+00, 百分比显示：314.16%